package com.example.flashsales.service;

import com.example.flashsales.entity.dto.*;
import com.example.flashsales.entity.vo.*;

import java.util.Date;
import java.util.List;
import java.util.Map;

public interface UserService {

    //用户查看所有商品，去商品表查看（这个查看只是初步查看有哪些商品）（分页）
    List<GoodsVo> viewAllGoods(int num,int page);

    //按类别查看商品（直接去商品表里面查询）
    List<GoodsVo> viewGoodsByType(GoodsDto goodsDto,int num,int page);

    //按商品名称查看商品（模糊查询，可输入一个字找到与之有关的集合，直接去商品表里面查询）
    List<GoodsVo> viewGoodsByName(String name,int num,int page);

    //查看商品的具体信息
    GoodsVo viewGoodsMessage(long id);

    //用户查看自己的订单
    Map<String,Object>viewOrders(long userId,int page,int num);

    //用户按时间查看自己的订单
    Map<String,Object>  viewOrdersByTime(long userId, Date qDate,Date hDate,int page,int num);

    // 用户查看店家的信息
    StoreVo viewStoreMessage(long storeId);

    //用户添加商品进入购物车 （调用OrderCarService里面的addGoodsInOrderCar方法）
    String addGoodsInOrderCar(long userId, OrderCarDetailsDto orderCarDetailsDto);

    //用户修改自己购物车里面商品的数据 (调用OrderCarService里面的changeOrderCarGoodsCount方法)
    String changeOrderCarGoodsCount(long userId,OrderCarDetailsDto orderCarDetailsDto);

    // 用户删除购物车里面的数据（调用OrderCarService里面的deleteGoodsInOrderCar方法）
    String deleteGoodsInOrderCar(long userId,OrderCarDetailsDto orderCarDetailsDto);

    //用户清空购物车
    String cleanOrderCar(long userId);

    //用户查看自己的购物车
    List<OrderCarDetailsVo> viewUserOrderCarMessage(long userId);

    //用户查看自己信息
    UserVo viewUserMessage(long userId);

    //用户修改密码（知道原密码，直接通过原密码修改）1
    String modifyPasswordByPassword(long userId, String oldPassword, String newPassword);

    //用户修改密码(通过短信验证码修改)1
    String modifyPasswordByPhoneNumber(String phone, String newPassword);

    //用户登录 （通过扫二维码登录）1
    UserVo loginByQrCode(String phone);

    //用户登录（通过短信验证码登录）1
    UserVo loginByPhone(String phone);

    //用户登录（通过电话号码和密码登录）
    UserVo loginByPassword(String phone, String password);

    //用户注册（通过扫描商家二维码注册 要调用StoreService里面的addUserCount方法）1
    String register(UserDto userDto);

    //用户下单
    MoneyVo setOrder(long userId,long storeId);

    //TODO 用户购买商品(微信支付的方式，或者支付宝)
    String payMoneyByWeChatOrAlipay(long userId,long storeId, Map<Long,Integer> map,double money);

    // 用户购买商品(余额支付)
    String payMoneyByBalance(long userId,double money ,long orderId);

    //TODO 用户购买商品(余额加支付宝或者微信)
    String payMoneyByByWeChatOrAlipayAndBalance(long userId,double moneyW ,long storeId, Map<Long,Integer> map,double moneyY);

    //用户查询自己的余额
    double viewUserMoney(long userId);

    //用户退款
    String refund(RefundDto refundDto, List<RefundDetailsDto> refundDetailsDtoList);

    // 用户查看自己的订单退款情况
    ReturnOrderVo viewRefundDetails(long refundId);

    //查看自己的所有退款
    List<ReturnOrderVo> viewAllRefund(long userId);

    //按类型查看
    List<ReturnOrderVo> viewRefundByState(long state,long userId);

    //修改账号余额
    boolean updateMoneyInUser(long userId,double money);

    //按时间类型查看流水纪录
    Map<String,Object> viewCostRecord(long i, Integer state, Integer page, Integer num, Date qDate, Date hDate);
}
